home *** CD-ROM | disk | FTP | other *** search
Text File | 2003-02-21 | 42.8 KB | 1,426 lines |
- '----------------------------------------------------------------------
- '
- ' Copyright (c) Microsoft Corporation. All rights reserved.
- '
- ' Abstract:
- ' prnmngr.vbs - printer script for WMI on Whistler
- ' used to add, delete, and list printers and connections
- ' also for getting and setting the default printer
- '
- ' Usage:
- ' prnmngr [-adxgtl?][co] [-s server][-p printer][-m driver model][-r port]
- ' [-u user name][-w password]
- '
- ' Examples:
- ' prnmngr -a -p "printer" -m "driver" -r "lpt1:"
- ' prnmngr -d -p "printer" -s server
- ' prnmngr -ac -p "\\server\printer"
- ' prnmngr -d -p "\\server\printer"
- ' prnmngr -x -s server
- ' prnmngr -l -s server
- ' prnmngr -g
- ' prnmngr -t -p "printer"
- '
- '----------------------------------------------------------------------
-
- option explicit
-
- '
- ' Debugging trace flags, to enable debug output trace message
- ' change gDebugFlag to true.
- '
- const kDebugTrace = 1
- const kDebugError = 2
- dim gDebugFlag
-
- gDebugFlag = false
-
- '
- ' Operation action values.
- '
- const kActionUnknown = 0
- const kActionAdd = 1
- const kActionAddConn = 2
- const kActionDel = 3
- const kActionDelAll = 4
- const kActionDelAllCon = 5
- const kActionDelAllLocal = 6
- const kActionList = 7
- const kActionGetDefaultPrinter = 8
- const kActionSetDefaultPrinter = 9
-
- const kErrorSuccess = 0
- const KErrorFailure = 1
-
- const kFlagCreateOnly = 2
-
- const kNameSpace = "root\cimv2"
-
- '
- ' Generic strings
- '
- const L_Empty_Text = ""
- const L_Space_Text = " "
- const L_Error_Text = "Error"
- const L_Success_Text = "Success"
- const L_Failed_Text = "Failed"
- const L_Hex_Text = "0x"
- const L_Printer_Text = "Printer"
- const L_Operation_Text = "Operation"
- const L_Provider_Text = "Provider"
- const L_Description_Text = "Description"
- const L_Debug_Text = "Debug:"
- const L_Connection_Text = "connection"
-
- '
- ' General usage messages
- '
- const L_Help_Help_General01_Text = "Usage: prnmngr [-adxgtl?][c] [-s server][-p printer][-m driver model]"
- const L_Help_Help_General02_Text = " [-r port][-u user name][-w password]"
- const L_Help_Help_General03_Text = "Arguments:"
- const L_Help_Help_General04_Text = "-a - add local printer"
- const L_Help_Help_General05_Text = "-ac - add printer connection"
- const L_Help_Help_General06_Text = "-d - delete printer"
- const L_Help_Help_General07_Text = "-g - get the default printer"
- const L_Help_Help_General08_Text = "-l - list printers"
- const L_Help_Help_General09_Text = "-m - driver model"
- const L_Help_Help_General10_Text = "-p - printer name"
- const L_Help_Help_General11_Text = "-r - port name"
- const L_Help_Help_General12_Text = "-s - server name"
- const L_Help_Help_General13_Text = "-t - set the default printer"
- const L_Help_Help_General14_Text = "-u - user name"
- const L_Help_Help_General15_Text = "-w - password"
- const L_Help_Help_General16_Text = "-x - delete all printers"
- const L_Help_Help_General17_Text = "-xc - delete all printer connections"
- const L_Help_Help_General18_Text = "-xo - delete all local printers"
- const L_Help_Help_General19_Text = "-? - display command usage"
- const L_Help_Help_General20_Text = "Examples:"
- const L_Help_Help_General21_Text = "prnmngr -a -p ""printer"" -m ""driver"" -r ""lpt1:"""
- const L_Help_Help_General22_Text = "prnmngr -d -p ""printer"" -s server"
- const L_Help_Help_General23_Text = "prnmngr -ac -p ""\\server\printer"""
- const L_Help_Help_General24_Text = "prnmngr -d -p ""\\server\printer"""
- const L_Help_Help_General25_Text = "prnmngr -x -s server"
- const L_Help_Help_General26_Text = "prnmngr -xo"
- const L_Help_Help_General27_Text = "prnmngr -l -s server"
- const L_Help_Help_General28_Text = "prnmngr -g"
- const L_Help_Help_General29_Text = "prnmngr -t -p ""\\server\printer"""
-
- '
- ' Messages to be displayed if the scripting host is not cscript
- '
- const L_Help_Help_Host01_Text = "Please run this script using CScript."
- const L_Help_Help_Host02_Text = "This can be achieved by"
- const L_Help_Help_Host03_Text = "1. Using ""CScript script.vbs arguments"" or"
- const L_Help_Help_Host04_Text = "2. Changing the default Windows Scripting Host to CScript"
- const L_Help_Help_Host05_Text = " using ""CScript //H:CScript //S"" and running the script "
- const L_Help_Help_Host06_Text = " ""script.vbs arguments""."
-
- '
- ' General error messages
- '
- const L_Text_Error_General01_Text = "The scripting host could not be determined."
- const L_Text_Error_General02_Text = "Unable to parse command line."
- const L_Text_Error_General03_Text = "Win32 error code"
-
- '
- ' Miscellaneous messages
- '
- const L_Text_Msg_General01_Text = "Added printer"
- const L_Text_Msg_General02_Text = "Unable to add printer"
- const L_Text_Msg_General03_Text = "Added printer connection"
- const L_Text_Msg_General04_Text = "Unable to add printer connection"
- const L_Text_Msg_General05_Text = "Deleted printer"
- const L_Text_Msg_General06_Text = "Unable to delete printer"
- const L_Text_Msg_General07_Text = "Attempting to delete printer"
- const L_Text_Msg_General08_Text = "Unable to delete printers"
- const L_Text_Msg_General09_Text = "Number of local printers and connections enumerated"
- const L_Text_Msg_General10_Text = "Number of local printers and connections deleted"
- const L_Text_Msg_General11_Text = "Unable to enumerate printers"
- const L_Text_Msg_General12_Text = "The default printer is"
- const L_Text_Msg_General13_Text = "Unable to get the default printer"
- const L_Text_Msg_General14_Text = "Unable to set the default printer"
- const L_Text_Msg_General15_Text = "The default printer is now"
- const L_Text_Msg_General16_Text = "Number of printer connections enumerated"
- const L_Text_Msg_General17_Text = "Number of printer connections deleted"
- const L_Text_Msg_General18_Text = "Number of local printers enumerated"
- const L_Text_Msg_General19_Text = "Number of local printers deleted"
-
- '
- ' Printer properties
- '
- const L_Text_Msg_Printer01_Text = "Server name"
- const L_Text_Msg_Printer02_Text = "Printer name"
- const L_Text_Msg_Printer03_Text = "Share name"
- const L_Text_Msg_Printer04_Text = "Driver name"
- const L_Text_Msg_Printer05_Text = "Port name"
- const L_Text_Msg_Printer06_Text = "Comment"
- const L_Text_Msg_Printer07_Text = "Location"
- const L_Text_Msg_Printer08_Text = "Separator file"
- const L_Text_Msg_Printer09_Text = "Print processor"
- const L_Text_Msg_Printer10_Text = "Data type"
- const L_Text_Msg_Printer11_Text = "Parameters"
- const L_Text_Msg_Printer12_Text = "Attributes"
- const L_Text_Msg_Printer13_Text = "Priority"
- const L_Text_Msg_Printer14_Text = "Default priority"
- const L_Text_Msg_Printer15_Text = "Start time"
- const L_Text_Msg_Printer16_Text = "Until time"
- const L_Text_Msg_Printer17_Text = "Job count"
- const L_Text_Msg_Printer18_Text = "Average pages per minute"
- const L_Text_Msg_Printer19_Text = "Printer status"
- const L_Text_Msg_Printer20_Text = "Extended printer status"
- const L_Text_Msg_Printer21_Text = "Detected error state"
- const L_Text_Msg_Printer22_Text = "Extended detected error state"
-
-
- '
- ' Printer status
- '
- const L_Text_Msg_Status01_Text = "Other"
- const L_Text_Msg_Status02_Text = "Unknown"
- const L_Text_Msg_Status03_Text = "Idle"
- const L_Text_Msg_Status04_Text = "Printing"
- const L_Text_Msg_Status05_Text = "Warmup"
- const L_Text_Msg_Status06_Text = "Stopped printing"
- const L_Text_Msg_Status07_Text = "Offline"
- const L_Text_Msg_Status08_Text = "Paused"
- const L_Text_Msg_Status09_Text = "Error"
- const L_Text_Msg_Status10_Text = "Busy"
- const L_Text_Msg_Status11_Text = "Not available"
- const L_Text_Msg_Status12_Text = "Waiting"
- const L_Text_Msg_Status13_Text = "Processing"
- const L_Text_Msg_Status14_Text = "Initializing"
- const L_Text_Msg_Status15_Text = "Power save"
- const L_Text_Msg_Status16_Text = "Pending deletion"
- const L_Text_Msg_Status17_Text = "I/O active"
- const L_Text_Msg_Status18_Text = "Manual feed"
- const L_Text_Msg_Status19_Text = "No error"
- const L_Text_Msg_Status20_Text = "Low paper"
- const L_Text_Msg_Status21_Text = "No paper"
- const L_Text_Msg_Status22_Text = "Low toner"
- const L_Text_Msg_Status23_Text = "No toner"
- const L_Text_Msg_Status24_Text = "Door open"
- const L_Text_Msg_Status25_Text = "Jammed"
- const L_Text_Msg_Status26_Text = "Service requested"
- const L_Text_Msg_Status27_Text = "Output bin full"
- const L_Text_Msg_Status28_Text = "Paper problem"
- const L_Text_Msg_Status29_Text = "Cannot print page"
- const L_Text_Msg_Status30_Text = "User intervention required"
- const L_Text_Msg_Status31_Text = "Out of memory"
- const L_Text_Msg_Status32_Text = "Server unknown"
-
- '
- ' Debug messages
- '
- const L_Text_Dbg_Msg01_Text = "In function AddPrinter"
- const L_Text_Dbg_Msg02_Text = "In function AddPrinterConnection"
- const L_Text_Dbg_Msg03_Text = "In function DelPrinter"
- const L_Text_Dbg_Msg04_Text = "In function DelAllPrinters"
- const L_Text_Dbg_Msg05_Text = "In function ListPrinters"
- const L_Text_Dbg_Msg06_Text = "In function GetDefaultPrinter"
- const L_Text_Dbg_Msg07_Text = "In function SetDefaultPrinter"
- const L_Text_Dbg_Msg08_Text = "In function ParseCommandLine"
-
- main
-
- '
- ' Main execution starts here
- '
- sub main
-
- dim iAction
- dim iRetval
- dim strServer
- dim strPrinter
- dim strDriver
- dim strPort
- dim strUser
- dim strPassword
-
- '
- ' Abort if the host is not cscript
- '
- if not IsHostCscript() then
-
- call wscript.echo(L_Help_Help_Host01_Text & vbCRLF & L_Help_Help_Host02_Text & vbCRLF & _
- L_Help_Help_Host03_Text & vbCRLF & L_Help_Help_Host04_Text & vbCRLF & _
- L_Help_Help_Host05_Text & vbCRLF & L_Help_Help_Host06_Text & vbCRLF)
-
- wscript.quit
-
- end if
-
- '
- ' Get command line parameters
- '
- iRetval = ParseCommandLine(iAction, strServer, strPrinter, strDriver, strPort, strUser, strPassword)
-
- if iRetval = kErrorSuccess then
-
- select case iAction
-
- case kActionAdd
- iRetval = AddPrinter(strServer, strPrinter, strDriver, strPort, strUser, strPassword)
-
- case kActionAddConn
- iRetval = AddPrinterConnection(strPrinter, strUser, strPassword)
-
- case kActionDel
- iRetval = DelPrinter(strServer, strPrinter, strUser, strPassword)
-
- case kActionDelAll
- iRetval = DelAllPrinters(kActionDelAll, strServer, strUser, strPassword)
-
- case kActionDelAllCon
- iRetval = DelAllPrinters(kActionDelAllCon, strServer, strUser, strPassword)
-
- case kActionDelAllLocal
- iRetval = DelAllPrinters(kActionDelAllLocal, strServer, strUser, strPassword)
-
- case kActionList
- iRetval = ListPrinters(strServer, strUser, strPassword)
-
- case kActionGetDefaultPrinter
- iRetval = GetDefaultPrinter(strUser, strPassword)
-
- case kActionSetDefaultPrinter
- iRetval = SetDefaultPrinter(strPrinter, strUser, strPassword)
-
- case kActionUnknown
- Usage(true)
- exit sub
-
- case else
- Usage(true)
- exit sub
-
- end select
-
- end if
-
- end sub
-
- '
- ' Add a printer with minimum settings. Use prncnfg.vbs to
- ' set the complete configuration of a printer
- '
- function AddPrinter(strServer, strPrinter, strDriver, strPort, strUser, strPassword)
-
- on error resume next
-
- DebugPrint kDebugTrace, L_Text_Dbg_Msg01_Text
- DebugPrint kDebugTrace, L_Text_Msg_Printer01_Text & L_Space_Text & strServer
- DebugPrint kDebugTrace, L_Text_Msg_Printer02_Text & L_Space_Text & strPrinter
- DebugPrint kDebugTrace, L_Text_Msg_Printer04_Text & L_Space_Text & strDriver
- DebugPrint kDebugTrace, L_Text_Msg_Printer05_Text & L_Space_Text & strPort
-
- dim oPrinter
- dim oService
- dim iRetval
-
- if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then
-
- set oPrinter = oService.Get("Win32_Printer").SpawnInstance_
-
- else
-
- AddPrinter = kErrorFailure
-
- exit function
-
- end if
-
- oPrinter.DriverName = strDriver
- oPrinter.PortName = strPort
- oPrinter.DeviceID = strPrinter
-
- oPrinter.Put_(kFlagCreateOnly)
-
- if Err.Number = kErrorSuccess then
-
- wscript.echo L_Text_Msg_General01_Text & L_Space_Text & strPrinter
-
- iRetval = kErrorSuccess
-
- else
-
- wscript.echo L_Text_Msg_General02_Text & L_Space_Text & strPrinter & L_Space_Text & L_Error_Text _
- & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
-
- '
- ' Try getting extended error information
- '
- call LastError()
-
- iRetval = kErrorFailure
-
- end if
-
- AddPrinter = iRetval
-
- end function
-
- '
- ' Add a printer connection
- '
- function AddPrinterConnection(strPrinter, strUser, strPassword)
-
- on error resume next
-
- DebugPrint kDebugTrace, L_Text_Dbg_Msg02_Text
-
- dim oPrinter
- dim oService
- dim iRetval
- dim uResult
-
- '
- ' Initialize return value
- '
- iRetval = kErrorFailure
-
- '
- ' We connect to the local server
- '
- if WmiConnect("", kNameSpace, strUser, strPassword, oService) then
-
- set oPrinter = oService.Get("Win32_Printer")
-
- else
-
- AddPrinterConnection = kErrorFailure
-
- exit function
-
- end if
-
- '
- ' Check if Get was successful
- '
- if Err.Number = kErrorSuccess then
-
- '
- ' The Err object indicates whether the WMI provider reached the execution
- ' of the function that adds a printer connection. The uResult is the Win32
- ' error code returned by the static method that adds a printer connection
- '
- uResult = oPrinter.AddPrinterConnection(strPrinter)
-
- if Err.Number = kErrorSuccess then
-
- if uResult = kErrorSuccess then
-
- wscript.echo L_Text_Msg_General03_Text & L_Space_Text & strPrinter
-
- iRetval = kErrorSuccess
-
- else
-
- wscript.echo L_Text_Msg_General04_Text & L_Space_Text & L_Text_Error_General03_Text _
- & L_Space_text & uResult
-
- end if
-
- else
-
- wscript.echo L_Text_Msg_General04_Text & L_Space_Text & strPrinter & L_Space_Text _
- & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _
- & Err.Description
-
- end if
-
- else
-
- wscript.echo L_Text_Msg_General04_Text & L_Space_Text & strPrinter & L_Space_Text _
- & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _
- & Err.Description
-
- end if
-
- AddPrinterConnection = iRetval
-
- end function
-
- '
- ' Delete a printer or a printer connection
- '
- function DelPrinter(strServer, strPrinter, strUser, strPassword)
-
- on error resume next
-
- DebugPrint kDebugTrace, L_Text_Dbg_Msg03_Text
- DebugPrint kDebugTrace, L_Text_Msg_Printer01_Text & L_Space_Text & strServer
- DebugPrint kDebugTrace, L_Text_Msg_Printer02_Text & L_Space_Text & strPrinter
-
- dim oService
- dim oPrinter
- dim iRetval
-
- iRetval = kErrorFailure
-
- if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then
-
- set oPrinter = oService.Get("Win32_Printer.DeviceID='" & strPrinter & "'")
-
- else
-
- DelPrinter = kErrorFailure
-
- exit function
-
- end if
-
- '
- ' Check if Get was successful
- '
- if Err.Number = kErrorSuccess then
-
- oPrinter.Delete_
-
- if Err.Number = kErrorSuccess then
-
- wscript.echo L_Text_Msg_General05_Text & L_Space_Text & strPrinter
-
- iRetval = kErrorSuccess
-
- else
-
- wscript.echo L_Text_Msg_General06_Text & L_Space_Text & strPrinter & L_Space_Text _
- & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _
- & L_Space_Text & Err.Description
-
- '
- ' Try getting extended error information
- '
- call LastError()
-
- end if
-
- else
-
- wscript.echo L_Text_Msg_General06_Text & L_Space_Text & strPrinter & L_Space_Text _
- & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _
- & L_Space_Text & Err.Description
-
- '
- ' Try getting extended error information
- '
- call LastError()
-
- end if
-
- DelPrinter = iRetval
-
- end function
-
- '
- ' Delete all local printers and connections on a machine
- '
- function DelAllPrinters(kAction, strServer, strUser, strPassword)
-
- on error resume next
-
- DebugPrint kDebugTrace, L_Text_Dbg_Msg04_Text
-
- dim Printers
- dim oPrinter
- dim oService
- dim iResult
- dim iTotal
- dim iTotalDeleted
- dim strPrinterName
- dim bDelete
- dim bConnection
- dim strTemp
-
- if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then
-
- set Printers = oService.InstancesOf("Win32_Printer")
-
- else
-
- DelAllPrinters = kErrorFailure
-
- exit function
-
- end if
-
- if Err.Number <> kErrorSuccess then
-
- wscript.echo L_Text_Msg_General11_Text & L_Space_Text & L_Error_Text & L_Space_Text _
- & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
-
- DelAllPrinters = kErrorFailure
-
- exit function
-
- end if
-
- iTotal = 0
- iTotalDeleted = 0
-
- for each oPrinter in Printers
-
- strPrinterName = oPrinter.DeviceID
-
- bConnection = oPrinter.Network
-
- if kAction = kActionDelAll then
-
- bDelete = 1
-
- iTotal = iTotal + 1
-
- elseif kAction = kActionDelAllCon and bConnection then
-
- bDelete = 1
-
- iTotal = iTotal + 1
-
- elseif kAction = kActionDelAllLocal and not bConnection then
-
- bDelete = 1
-
- iTotal = iTotal + 1
-
- else
-
- bDelete = 0
-
- end if
-
- if bDelete = 1 then
-
- if bConnection then
-
- strTemp = L_Space_Text & L_Connection_Text & L_Space_Text
-
- else
-
- strTemp = L_Space_Text
-
- end if
-
- '
- ' Delete printer instance
- '
- oPrinter.Delete_
-
- if Err.Number = kErrorSuccess then
-
- wscript.echo L_Text_Msg_General05_Text & strTemp & oPrinter.DeviceID
-
- iTotalDeleted = iTotalDeleted + 1
-
- else
-
- wscript.echo L_Text_Msg_General06_Text & strTemp & strPrinterName _
- & L_Space_Text & L_Error_Text & L_Space_Text & L_Hex_Text _
- & hex(Err.Number) & L_Space_Text & Err.Description
-
- '
- ' Try getting extended error information
- '
- call LastError()
-
- '
- ' Continue deleting the rest of the printers despite this error
- '
- Err.Clear
-
- end if
-
- end if
-
- next
-
- wscript.echo L_Empty_Text
-
- if kAction = kActionDelAll then
-
- wscript.echo L_Text_Msg_General09_Text & L_Space_Text & iTotal
- wscript.echo L_Text_Msg_General10_Text & L_Space_Text & iTotalDeleted
-
- elseif kAction = kActionDelAllCon then
-
- wscript.echo L_Text_Msg_General16_Text & L_Space_Text & iTotal
- wscript.echo L_Text_Msg_General17_Text & L_Space_Text & iTotalDeleted
-
- elseif kAction = kActionDelAllLocal then
-
- wscript.echo L_Text_Msg_General18_Text & L_Space_Text & iTotal
- wscript.echo L_Text_Msg_General19_Text & L_Space_Text & iTotalDeleted
-
- else
-
- end if
-
- DelAllPrinters = kErrorSuccess
-
- end function
-
- '
- ' List the printers
- '
- function ListPrinters(strServer, strUser, strPassword)
-
- on error resume next
-
- DebugPrint kDebugTrace, L_Text_Dbg_Msg05_Text
-
- dim Printers
- dim oService
- dim oPrinter
- dim iTotal
-
- if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then
-
- set Printers = oService.InstancesOf("Win32_Printer")
-
- else
-
- ListPrinters = kErrorFailure
-
- exit function
-
- end if
-
- if Err.Number <> kErrorSuccess then
-
- wscript.echo L_Text_Msg_General11_Text & L_Space_Text & L_Error_Text & L_Space_Text _
- & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
-
- ListPrinters = kErrorFailure
-
- exit function
-
- end if
-
- iTotal = 0
-
- for each oPrinter in Printers
-
- iTotal = iTotal + 1
-
- wscript.echo L_Empty_Text
- wscript.echo L_Text_Msg_Printer01_Text & L_Space_Text & strServer
- wscript.echo L_Text_Msg_Printer02_Text & L_Space_Text & oPrinter.DeviceID
- wscript.echo L_Text_Msg_Printer03_Text & L_Space_Text & oPrinter.ShareName
- wscript.echo L_Text_Msg_Printer04_Text & L_Space_Text & oPrinter.DriverName
- wscript.echo L_Text_Msg_Printer05_Text & L_Space_Text & oPrinter.PortName
- wscript.echo L_Text_Msg_Printer06_Text & L_Space_Text & oPrinter.Comment
- wscript.echo L_Text_Msg_Printer07_Text & L_Space_Text & oPrinter.Location
- wscript.echo L_Text_Msg_Printer08_Text & L_Space_Text & oPrinter.SepFile
- wscript.echo L_Text_Msg_Printer09_Text & L_Space_Text & oPrinter.PrintProcessor
- wscript.echo L_Text_Msg_Printer10_Text & L_Space_Text & oPrinter.PrintJobDataType
- wscript.echo L_Text_Msg_Printer11_Text & L_Space_Text & oPrinter.Parameters
- wscript.echo L_Text_Msg_Printer12_Text & L_Space_Text & CSTR(oPrinter.Attributes)
- wscript.echo L_Text_Msg_Printer13_Text & L_Space_Text & CSTR(oPrinter.Priority)
- wscript.echo L_Text_Msg_Printer14_Text & L_Space_Text & CStr(oPrinter.DefaultPriority)
-
- if CStr(oPrinter.StartTime) <> "" and CStr(oPrinter.UntilTime) <> "" then
-
- wscript.echo L_Text_Msg_Printer15_Text & L_Space_Text & Mid(Mid(CStr(oPrinter.StartTime), 9, 4), 1, 2) & "h" & Mid(Mid(CStr(oPrinter.StartTime), 9, 4), 3, 2)
- wscript.echo L_Text_Msg_Printer16_Text & L_Space_Text & Mid(Mid(CStr(oPrinter.UntilTime), 9, 4), 1, 2) & "h" & Mid(Mid(CStr(oPrinter.UntilTime), 9, 4), 3, 2)
-
- end if
-
- wscript.echo L_Text_Msg_Printer17_Text & L_Space_Text & CStr(oPrinter.Jobs)
- wscript.echo L_Text_Msg_Printer18_Text & L_Space_Text & CStr(oPrinter.AveragePagesPerMinute)
- wscript.echo L_Text_Msg_Printer19_Text & L_Space_Text & PrnStatusToString(oPrinter.PrinterStatus)
- wscript.echo L_Text_Msg_Printer20_Text & L_Space_Text & ExtPrnStatusToString(oPrinter.ExtendedPrinterStatus)
- wscript.echo L_Text_Msg_Printer21_Text & L_Space_Text & DetectedErrorStateToString(oPrinter.DetectedErrorState)
- wscript.echo L_Text_Msg_Printer22_Text & L_Space_Text & ExtDetectedErrorStateToString(oPrinter.ExtendedDetectedErrorState)
-
- Err.Clear
-
- next
-
- wscript.echo L_Empty_Text
- wscript.echo L_Text_Msg_General09_Text & L_Space_Text & iTotal
-
- ListPrinters = kErrorSuccess
-
- end function
-
- '
- ' Get the default printer
- '
- function GetDefaultPrinter(strUser, strPassword)
-
- on error resume next
-
- DebugPrint kDebugTrace, L_Text_Dbg_Msg06_Text
-
- dim oService
- dim oPrinter
- dim iRetval
- dim oEnum
-
- iRetval = kErrorFailure
-
- '
- ' We connect to the local server
- '
- if WmiConnect("", kNameSpace, strUser, strPassword, oService) then
-
- set oEnum = oService.ExecQuery("select DeviceID from Win32_Printer where default=true")
-
- else
-
- SetDefaultPrinter = kErrorFailure
-
- exit function
-
- end if
-
- if Err.Number = kErrorSuccess then
-
- for each oPrinter in oEnum
-
- wscript.echo L_Text_Msg_General12_Text & L_Space_Text & oPrinter.DeviceID
-
- next
-
- iRetval = kErrorSuccess
-
- else
-
- wscript.echo L_Text_Msg_General13_Text & L_Space_Text & L_Error_Text & L_Space_Text _
- & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
-
- end if
-
- GetDefaultPrinter = iRetval
-
- end function
-
- '
- ' Set the default printer
- '
- function SetDefaultPrinter(strPrinter, strUser, strPassword)
-
- 'on error resume next
-
- DebugPrint kDebugTrace, L_Text_Dbg_Msg07_Text
-
- dim oService
- dim oPrinter
- dim iRetval
- dim uResult
-
- iRetval = kErrorFailure
-
- '
- ' We connect to the local server
- '
- if WmiConnect("", kNameSpace, strUser, strPassword, oService) then
-
- set oPrinter = oService.Get("Win32_Printer.DeviceID='" & strPrinter & "'")
-
- else
-
- SetDefaultPrinter = kErrorFailure
-
- exit function
-
- end if
-
- '
- ' Check if Get was successful
- '
- if Err.Number = kErrorSuccess then
-
- '
- ' The Err object indicates whether the WMI provider reached the execution
- ' of the function that sets the default printer. The uResult is the Win32
- ' error code of the spooler function that sets the default printer
- '
- uResult = oPrinter.SetDefaultPrinter
-
- if Err.Number = kErrorSuccess then
-
- if uResult = kErrorSuccess then
-
- wscript.echo L_Text_Msg_General15_Text & L_Space_Text & strPrinter
-
- iRetval = kErrorSuccess
-
- else
-
- wscript.echo L_Text_Msg_General14_Text & L_Space_Text _
- & L_Text_Error_General03_Text& L_Space_Text & uResult
-
- end if
-
- else
-
- wscript.echo L_Text_Msg_General14_Text & L_Space_Text & L_Error_Text & L_Space_Text _
- & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
-
- end if
-
- else
-
- wscript.echo L_Text_Msg_General14_Text & L_Space_Text & L_Error_Text & L_Space_Text _
- & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
-
- '
- ' Try getting extended error information
- '
- call LastError()
-
- end if
-
- SetDefaultPrinter = iRetval
-
- end function
-
- '
- ' Converts the printer status to a string
- '
- function PrnStatusToString(Status)
-
- dim str
-
- str = L_Empty_Text
-
- select case Status
-
- case 1
- str = str + L_Text_Msg_Status01_Text + L_Space_Text
-
- case 2
- str = str + L_Text_Msg_Status02_Text + L_Space_Text
-
- case 3
- str = str + L_Text_Msg_Status03_Text + L_Space_Text
-
- case 4
- str = str + L_Text_Msg_Status04_Text + L_Space_Text
-
- case 5
- str = str + L_Text_Msg_Status05_Text + L_Space_Text
-
- case 6
- str = str + L_Text_Msg_Status06_Text + L_Space_Text
-
- case 7
- str = str + L_Text_Msg_Status07_Text + L_Space_Text
-
- end select
-
- PrnStatusToString = str
-
- end function
-
- '
- ' Converts the extended printer status to a string
- '
- function ExtPrnStatusToString(Status)
-
- dim str
-
- str = L_Empty_Text
-
- select case Status
-
- case 1
- str = str + L_Text_Msg_Status01_Text + L_Space_Text
-
- case 2
- str = str + L_Text_Msg_Status02_Text + L_Space_Text
-
- case 3
- str = str + L_Text_Msg_Status03_Text + L_Space_Text
-
- case 4
- str = str + L_Text_Msg_Status04_Text + L_Space_Text
-
- case 5
- str = str + L_Text_Msg_Status05_Text + L_Space_Text
-
- case 6
- str = str + L_Text_Msg_Status06_Text + L_Space_Text
-
- case 7
- str = str + L_Text_Msg_Status07_Text + L_Space_Text
-
- case 8
- str = str + L_Text_Msg_Status08_Text + L_Space_Text
-
- case 9
- str = str + L_Text_Msg_Status09_Text + L_Space_Text
-
- case 10
- str = str + L_Text_Msg_Status10_Text + L_Space_Text
-
- case 11
- str = str + L_Text_Msg_Status11_Text + L_Space_Text
-
- case 12
- str = str + L_Text_Msg_Status12_Text + L_Space_Text
-
- case 13
- str = str + L_Text_Msg_Status13_Text + L_Space_Text
-
- case 14
- str = str + L_Text_Msg_Status14_Text + L_Space_Text
-
- case 15
- str = str + L_Text_Msg_Status15_Text + L_Space_Text
-
- case 16
- str = str + L_Text_Msg_Status16_Text + L_Space_Text
-
- case 17
- str = str + L_Text_Msg_Status17_Text + L_Space_Text
-
- case 18
- str = str + L_Text_Msg_Status18_Text + L_Space_Text
-
- end select
-
- ExtPrnStatusToString = str
-
- end function
-
- '
- ' Converts the detected error state to a string
- '
- function DetectedErrorStateToString(Status)
-
- dim str
-
- str = L_Empty_Text
-
- select case Status
-
- case 0
- str = str + L_Text_Msg_Status02_Text + L_Space_Text
-
- case 1
- str = str + L_Text_Msg_Status01_Text + L_Space_Text
-
- case 2
- str = str + L_Text_Msg_Status01_Text + L_Space_Text
-
- case 3
- str = str + L_Text_Msg_Status20_Text + L_Space_Text
-
- case 4
- str = str + L_Text_Msg_Status21_Text + L_Space_Text
-
- case 5
- str = str + L_Text_Msg_Status22_Text + L_Space_Text
-
- case 6
- str = str + L_Text_Msg_Status23_Text + L_Space_Text
-
- case 7
- str = str + L_Text_Msg_Status24_Text + L_Space_Text
-
- case 8
- str = str + L_Text_Msg_Status25_Text + L_Space_Text
-
- case 9
- str = str + L_Text_Msg_Status07_Text + L_Space_Text
-
- case 10
- str = str + L_Text_Msg_Status26_Text + L_Space_Text
-
- case 11
- str = str + L_Text_Msg_Status27_Text + L_Space_Text
-
- end select
-
- DetectedErrorStateToString = str
-
- end function
-
- '
- ' Converts the extended detected error state to a string
- '
- function ExtDetectedErrorStateToString(Status)
-
- dim str
-
- str = L_Empty_Text
-
- select case Status
-
- case 0
- str = str + L_Text_Msg_Status02_Text + L_Space_Text
-
- case 1
- str = str + L_Text_Msg_Status01_Text + L_Space_Text
-
- case 2
- str = str + L_Text_Msg_Status01_Text + L_Space_Text
-
- case 3
- str = str + L_Text_Msg_Status20_Text + L_Space_Text
-
- case 4
- str = str + L_Text_Msg_Status21_Text + L_Space_Text
-
- case 5
- str = str + L_Text_Msg_Status22_Text + L_Space_Text
-
- case 6
- str = str + L_Text_Msg_Status23_Text + L_Space_Text
-
- case 7
- str = str + L_Text_Msg_Status24_Text + L_Space_Text
-
- case 8
- str = str + L_Text_Msg_Status25_Text + L_Space_Text
-
- case 9
- str = str + L_Text_Msg_Status07_Text + L_Space_Text
-
- case 10
- str = str + L_Text_Msg_Status26_Text + L_Space_Text
-
- case 11
- str = str + L_Text_Msg_Status27_Text + L_Space_Text
-
- case 12
- str = str + L_Text_Msg_Status28_Text + L_Space_Text
-
- case 13
- str = str + L_Text_Msg_Status29_Text + L_Space_Text
-
- case 14
- str = str + L_Text_Msg_Status30_Text + L_Space_Text
-
- case 15
- str = str + L_Text_Msg_Status31_Text + L_Space_Text
-
- case 16
- str = str + L_Text_Msg_Status32_Text + L_Space_Text
-
- end select
-
- ExtDetectedErrorStateToString = str
-
- end function
-
- '
- ' Debug display helper function
- '
- sub DebugPrint(uFlags, strString)
-
- if gDebugFlag = true then
-
- if uFlags = kDebugTrace then
-
- wscript.echo L_Debug_Text & L_Space_Text & strString
-
- end if
-
- if uFlags = kDebugError then
-
- if Err <> 0 then
-
- wscript.echo L_Debug_Text & L_Space_Text & strString & L_Space_Text _
- & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _
- & L_Space_Text & Err.Description
-
- end if
-
- end if
-
- end if
-
- end sub
-
- '
- ' Parse the command line into its components
- '
- function ParseCommandLine(iAction, strServer, strPrinter, strDriver, strPort, strUser, strPassword)
-
- on error resume next
-
- DebugPrint kDebugTrace, L_Text_Dbg_Msg08_Text
-
- dim oArgs
- dim iIndex
-
- iAction = kActionUnknown
- iIndex = 0
-
- set oArgs = wscript.Arguments
-
- while iIndex < oArgs.Count
-
- select case oArgs(iIndex)
-
- case "-a"
- iAction = kActionAdd
-
- case "-ac"
- iAction = kActionAddConn
-
- case "-d"
- iAction = kActionDel
-
- case "-x"
- iAction = kActionDelAll
-
- case "-xc"
- iAction = kActionDelAllCon
-
- case "-xo"
- iAction = kActionDelAllLocal
-
- case "-l"
- iAction = kActionList
-
- case "-g"
- iAction = kActionGetDefaultPrinter
-
- case "-t"
- iAction = kActionSetDefaultPrinter
-
- case "-s"
- iIndex = iIndex + 1
- strServer = RemoveBackslashes(oArgs(iIndex))
-
- case "-p"
- iIndex = iIndex + 1
- strPrinter = oArgs(iIndex)
-
- case "-m"
- iIndex = iIndex + 1
- strDriver = oArgs(iIndex)
-
- case "-u"
- iIndex = iIndex + 1
- strUser = oArgs(iIndex)
-
- case "-w"
- iIndex = iIndex + 1
- strPassword = oArgs(iIndex)
-
- case "-r"
- iIndex = iIndex + 1
- strPort = oArgs(iIndex)
-
- case "-?"
- Usage(true)
- exit function
-
- case else
- Usage(true)
- exit function
-
- end select
-
- iIndex = iIndex + 1
-
- wend
-
- if Err = kErrorSuccess then
-
- ParseCommandLine = kErrorSuccess
-
- else
-
- wscript.echo L_Text_Error_General02_Text & L_Space_Text & L_Error_Text & L_Space_Text _
- & L_Hex_Text & hex(Err.Number) & L_Space_text & Err.Description
-
- ParseCommandLine = kErrorFailure
-
- end if
-
- end function
-
- '
- ' Display command usage.
- '
- sub Usage(bExit)
-
- wscript.echo L_Help_Help_General01_Text
- wscript.echo L_Help_Help_General02_Text
- wscript.echo L_Help_Help_General03_Text
- wscript.echo L_Help_Help_General04_Text
- wscript.echo L_Help_Help_General05_Text
- wscript.echo L_Help_Help_General06_Text
- wscript.echo L_Help_Help_General07_Text
- wscript.echo L_Help_Help_General08_Text
- wscript.echo L_Help_Help_General09_Text
- wscript.echo L_Help_Help_General10_Text
- wscript.echo L_Help_Help_General11_Text
- wscript.echo L_Help_Help_General12_Text
- wscript.echo L_Help_Help_General13_Text
- wscript.echo L_Help_Help_General14_Text
- wscript.echo L_Help_Help_General15_Text
- wscript.echo L_Help_Help_General16_Text
- wscript.echo L_Help_Help_General17_Text
- wscript.echo L_Help_Help_General18_Text
- wscript.echo L_Help_Help_General19_Text
- wscript.echo L_Empty_Text
- wscript.echo L_Help_Help_General20_Text
- wscript.echo L_Help_Help_General21_Text
- wscript.echo L_Help_Help_General22_Text
- wscript.echo L_Help_Help_General23_Text
- wscript.echo L_Help_Help_General24_Text
- wscript.echo L_Help_Help_General25_Text
- wscript.echo L_Help_Help_General26_Text
- wscript.echo L_Help_Help_General27_Text
- wscript.echo L_Help_Help_General28_Text
- wscript.echo L_Help_Help_General29_Text
-
- if bExit then
-
- wscript.quit(1)
-
- end if
-
- end sub
-
- '
- ' Determines which program is being used to run this script.
- ' Returns true if the script host is cscript.exe
- '
- function IsHostCscript()
-
- on error resume next
-
- dim strFullName
- dim strCommand
- dim i, j
- dim bReturn
-
- bReturn = false
-
- strFullName = WScript.FullName
-
- i = InStr(1, strFullName, ".exe", 1)
-
- if i <> 0 then
-
- j = InStrRev(strFullName, "\", i, 1)
-
- if j <> 0 then
-
- strCommand = Mid(strFullName, j+1, i-j-1)
-
- if LCase(strCommand) = "cscript" then
-
- bReturn = true
-
- end if
-
- end if
-
- end if
-
- if Err <> 0 then
-
- wscript.echo L_Text_Error_General01_Text & L_Space_Text & L_Error_Text & L_Space_Text _
- & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
-
- end if
-
- IsHostCscript = bReturn
-
- end function
-
- '
- ' Retrieves extended information about the last error that occurred
- ' during a WBEM operation. The methods that set an SWbemLastError
- ' object are GetObject, PutInstance, DeleteInstance
- '
- sub LastError()
-
- on error resume next
-
- dim oError
-
- set oError = CreateObject("WbemScripting.SWbemLastError")
-
- if Err = kErrorSuccess then
-
- wscript.echo L_Operation_Text & L_Space_Text & oError.Operation
- wscript.echo L_Provider_Text & L_Space_Text & oError.ProviderName
- wscript.echo L_Description_Text & L_Space_Text & oError.Description
- wscript.echo L_Text_Error_General03_Text & L_Space_Text & oError.StatusCode
-
- end if
-
- end sub
-
- '
- ' Connects to the WMI service on a server. oService is returned as a service
- ' object (SWbemServices)
- '
- function WmiConnect(strServer, strNameSpace, strUser, strPassword, oService)
-
- on error resume next
-
- dim oLocator
- dim bResult
-
- oService = null
-
- bResult = false
-
- set oLocator = CreateObject("WbemScripting.SWbemLocator")
-
- if Err = kErrorSuccess then
-
- set oService = oLocator.ConnectServer(strServer, strNameSpace, strUser, strPassword)
-
- if Err = kErrorSuccess then
-
- bResult = true
-
- oService.Security_.impersonationlevel = 3
-
- '
- ' Required to perform administrative tasks on the spooler service
- '
- oService.Security_.Privileges.AddAsString "SeLoadDriverPrivilege"
-
- Err.Clear
-
- else
-
- wscript.echo L_Text_Msg_General11_Text & L_Space_Text & L_Error_Text _
- & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _
- & Err.Description
-
- end if
-
- else
-
- wscript.echo L_Text_Msg_General10_Text & L_Space_Text & L_Error_Text _
- & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _
- & Err.Description
-
- end if
-
- WmiConnect = bResult
-
- end function
-
- '
- ' Remove leading "\\" from server name
- '
- function RemoveBackslashes(strServer)
-
- dim strRet
-
- strRet = strServer
-
- if Left(strServer, 2) = "\\" and Len(strServer) > 2 then
-
- strRet = Mid(strServer, 3)
-
- end if
-
- RemoveBackslashes = strRet
-
- end function
-